package com.example.student.mapper;

import com.example.student.pojo.Stu;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 员工管理
 * @author 34082
 */
@Mapper
public interface StuMapper {
    /**
     * 根据id查找学生
     * @param id 学生id
     * @return Stu
     */
    @Select("select * from students where student_id = #{id}")
    Stu getById(Integer id);

    /**
     * 删除学生
     * @param id 学生id
     */
    @Delete("delete from students where student_id = #{id}")
    void deleteById(Integer id);

    /**
     * 查找所有学生信息
     * @return List<Stu>
     */
    @Select("select * from students")
    List<Stu> list();

    /**
     *  更新学生信息
     * @param stu 学生对象
     * 更新学生信息
     */
    @Update("update students set name = #{name},gender=#{gender},birth =#{birth},update_time = #{updateTime} where student_id = #{studentId}")
    void update(Stu stu);

    /**
     * 添加学生信息
     * @param stu 学生对象
     */
    @Insert("insert into students(student_id,name,gender,birth,dept_id,create_time,update_time) " +
            "values(#{studentId},#{name},#{gender},#{birth},#{deptId},#{createTime},#{updateTime})")
    void insert(Stu stu);

    /**
     * 统计学生人数
     * @return long
     */
    @Select("select count(*) from students")
     long count();

    /**
     * 分页查询学生信息
     * @param start 起始页
     * @param pageSize 每页显示数量
     * @return List<Stu>
     */
   @Select("select * from students order by student_id  limit #{start},#{pageSize}")
    List<Stu> page(Integer start,Integer pageSize);

    /**
     * 条件查询学生信息
     * @param start 起始页
     * @param pageSize 每页显示数量
     * @param studentId 学生id
     * @param name 学生姓名
     * @param gender 学生性别
     * @return List<Stu>
     */
    List<Stu> pages(Integer start,Integer pageSize, Integer studentId,String name,Short gender);

    /**
     * 统计符合条件的学生人数
     * @param studentId 学生id
     * @param name 学生姓名
     * @param gender 学生性别
     * @return long
     */
    long counts(Integer studentId, String name, Short gender);

    /**
     * 根据班级id查询学生信息
     * @param deptId 班级id
     * @return List<Stu>
     */
    @Select("select count(*) from students where dept_id = #{deptId}")
    long classCounts(Integer deptId);

    /**
     * 根据班级id分页查询学生信息
     * @param start  起始页
     * @param pageSize 每页显示数量
     * @param deptId 班级id
     * @return List<Stu>
     */
    @Select("select * from students where dept_id = #{deptId} order by student_id limit #{start},#{pageSize}")
    List<Stu> classPages(Integer start, Integer pageSize, Integer deptId);

    /**
     *
     * 查询学生id最大值
     * @return int
     */
    @Select(("select max(student_id) from students"))
    int findMax();

}